package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 反射机制访问方法
 */
public class ReflectDemo4 {
    public static void main(String[] args) throws ClassNotFoundException {
//        Class cls = Class.forName("java.lang.String");
        Class cls = Class.forName("reflect.Person");
        //获取该类的所有公开方法(包含从超类继承的)
//        Method[] methods = cls.getMethods();
        /*
            Class提供了一组:getDeclaredXXX()
            用于获取本类定义的相关内容，包含私有成员。
            例如:
            getDeclaredMethods 用于获取本类定义的所有方法
         */
        Method[] methods = cls.getDeclaredMethods();
        for(Method method : methods){
            System.out.println(method.getName());
            /*
                Method对象提供了很多的get方法，可以反应出其表示方法的相关信息
             */
            //获取该方法共有多少个参数
            int count = method.getParameterCount();
            System.out.println("共"+count+"个参数");
            //获取访问修饰符
            int modifiers = method.getModifiers();
            //java.lang.reflect.Modifier类定义了常量，标识访问修饰符
            switch (modifiers){
                case  Modifier.PUBLIC :
                    System.out.println("公开方法");
                    break;
                case Modifier.PRIVATE:
                    System.out.println("私有方法");
                    break;
                case Modifier.PROTECTED:
                    System.out.println("受保护方法");
                    break;
            }


        }

    }
}





